package gin

import (
	"net/http"
)


type Gin struct {
	mengine *engine
}

func New() *Gin {
	g :=  &Gin{
		mengine: newEngine(),
		
	}
	
	return g
}


// 这里使用函数式接口
type Handler interface {
	HandlerHttp(ctx *Ctx)
}
type HandlerFunc func(*Ctx)

func (h HandlerFunc) HandlerHttp(ctx *Ctx)  {
	h(ctx)
}

func (g *Gin) GetF(path string,f HandlerFunc)  {
	g.mengine.get(path,Handler(f))
}

func (g *Gin) PostF(path string,f HandlerFunc)  {
	g.mengine.post(path,Handler(f))
}

func (g *Gin) Get(path string,f Handler)  {
	g.mengine.get(path,f)
}

func (g *Gin) Post(path string,f Handler)  {
	g.mengine.post(path,f)
}

func (g *Gin) Use(f HandlerFunc) {
	g.mengine.use(f)
}


func (g *Gin) Run(port string)  {
	http.ListenAndServe(port,g.mengine)
}

// 传入url: /ss/aa 这种  path 笔记//ss/ss
func (g *Gin) Static(url string,path string)  {
	// 创建一个路由 /url/*
	// 下次提取出url里面的参数然后通过本地文件io读取文件设置好header再返回
	g.Get(url+"/*",staticDeal(path))
}

//开启跨域
func (g *Gin) Cors() {
	g.Use(Cors())
}	

//
func (g *Gin) Group(name string) *Group {
	return g.mengine.group(name)
}


